import re
import pypinyin

def to_pinyin_var(var_name):
    """将中文变量名转换为拼音加下划线格式"""
    # 如果变量名已经是英文或以下划线开头的英文，则直接返回
    if re.match(r'^[a-zA-Z_][a-zA-Z0-9_]*$', var_name) and not re.search(r'[\u4e00-\u9fff]', var_name):
        # 如果是以下划线开头，保持原样
        if var_name.startswith('_'):
            return var_name.upper()
        # 其他英文变量名转为大写
        return var_name.upper()
    
    # 处理包含中文的变量名
    # 使用pypinyin将中文转换为拼音
    pinyin_list = []
    for char in var_name:
        if '\u4e00' <= char <= '\u9fff':  # 如果是中文字符
            # 获取拼音，取第一个读音
            pinyin = pypinyin.lazy_pinyin(char)[0]
            pinyin_list.append(pinyin.upper())
        else:
            # 保留非中文字符（如英文字母、数字、下划线等）
            pinyin_list.append(char.upper())
    
    # 用下划线连接
    result = '_'.join(pinyin_list)
    
    # 确保不以下划线开头（除非原来是以下划线开头的）
    if not var_name.startswith('_') and result.startswith('_'):
        result = result[1:]
    
    return result

# 读取文件内容
file_path = r'd:\workspace\idea\gitee\cms\gitee\spring-boot-cmstab-qiye\src\main\java\com\cms\jy\draft\constant\video_effect_meta.py'

print("开始读取文件...")

with open(file_path, 'r', encoding='utf-8') as f:
    content = f.read()

print("文件读取完成")

# 查找所有Effect_meta定义
print("开始解析Effect_meta定义...")

# 使用更精确的正则表达式匹配Effect_meta定义
pattern = r'(\w+)\s*=\s*Effect_meta\("([^"]+)",\s*(True|False),\s*"([^"]+)",\s*"([^"]+)",\s*"([^"]+)",\s*\[\s*([\s\S]*?)\s*\]\s*\)'
matches = re.findall(pattern, content)

print(f"找到 {len(matches)} 个Effect_meta定义")

# 生成Java代码
print("开始生成Java代码...")

java_effects = []

for i, match in enumerate(matches):
    var_name, name, is_vip, resource_id, effect_id, md5, params_str = match
    
    # 显示进度
    if i % 100 == 0:
        print(f"  处理进度: {i}/{len(matches)} ({i/len(matches)*100:.1f}%)")
    
    # 转换变量名为拼音格式
    java_var_name = to_pinyin_var(var_name)
    
    # 解析参数
    param_pattern = r'Effect_param\("([^"]+)",\s*([0-9.]+),\s*([0-9.]+),\s*([0-9.]+)\)'
    param_matches = re.findall(param_pattern, params_str)
    
    # 生成Java代码
    if not param_matches:  # 没有参数
        java_code = f'        public static final Effect {java_var_name} = new Effect("{name}", {"true" if is_vip == "True" else "false"}, "{resource_id}", "{effect_id}", "{md5}");'
    else:  # 有参数
        # 构建参数列表
        param_lines = []
        for param_match in param_matches:
            param_name, value, min_val, max_val = param_match
            param_lines.append(f'                new EffectParam("{param_name}", {float(value)}, {float(min_val)}, {float(max_val)})')
        
        # 生成完整的Java代码
        params_str = ',\n'.join(param_lines)
        java_code = f'        public static final Effect {java_var_name} = new Effect("{name}", {"true" if is_vip == "True" else "false"}, "{resource_id}", "{effect_id}", "{md5}",\n{params_str});'
    
    java_effects.append(java_code)

print("Java代码生成完成")

# 写入文件
print("开始写入文件...")

with open(r'd:\workspace\idea\gitee\cms\gitee\spring-boot-cmstab-qiye\copy\final_converted_effects.java', 'w', encoding='utf-8') as f:
    f.write("public static class VideoSceneEffectType {\n")
    for effect in java_effects:
        f.write(effect + '\n')
    f.write("}\n")

print("转换完成！结果已保存到 final_converted_effects.java 文件中。")